package org.study.tdengine.mybatis.boot.mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * TDengine数据库操作
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2024年06月06日
 */
public interface DatabaseMapper {
    /**
     * 创建数据库
     *
     * @param dbName 数据库名称
     */
    int createDatabase(@Param("dbName") String dbName);

    /**
     * 创建数据库并配置相关参数
     *
     * @param dbName   数据库名称
     * @param paramMap 参数
     */
    int creatDatabaseWithParameters(@Param("dbName") String dbName, @Param("paramMap") Map<String, String> paramMap);

    /**
     * 删除数据库
     *
     * @param dbName 数据库名称
     */
    int dropDatabase(@Param("dbName") String dbName);

    /**
     * 查看系统中的所有数据库
     */
    List<String> showDatabases();

    /**
     * 显示一个数据库的创建语句
     *
     * @param dbName 数据库名称
     */
    Map<String, String> showCreateDatabase(@Param("dbName") String dbName);

    /**
     * 查看数据库参数
     *
     * @param dbName 数据库名称
     */
    Map<String, String> showDatabaseParam(@Param("dbName") String dbName);

    /**
     * 删除过期数据
     *
     * @param dbName 数据库名称
     */
    void trimDatabase(@Param("dbName") String dbName);

    /**
     * 落盘内存数据
     *
     * @param dbName 数据库名称
     */
    void flushDatabase(@Param("dbName") String dbName);

    /**
     * 查看数据库工作状态
     *
     * @param dbName 数据库名称
     */
    Integer showDatabaseAlive(@Param("dbName") String dbName);

    /**
     * 查看系统中已经存在的索引
     *
     * @param dbName 数据库名称
     */
    List<Map<String, Object>> showDatabaseIndex(@Param("dbName") String dbName);

    /**
     * 返回当前登录的数据库。如果登录的时候没有指定默认数据库，且没有使用USE命令切换数据库，则返回NULL
     */
    String database();

    /**
     * 返回客户端版本
     */
    String clientVersion();

    /**
     * 返回服务端版本
     */
    String serverVersion();

    /**
     * 检测服务端是否所有 dnode 都在线，如果是则返回成功，否则返回无法建立连接的错误
     */
    String serverStatus();

    /**
     * 获取当前用户
     */
    String currentUser();
}
